home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 077 < prev    next >
Text File  |  1995-01-02  |  75KB  |  2,103 lines

  1. C.S.M.P. Digest             Mon, 02 Jan 95       Volume 3 : Issue 77
  2.  
  3. Today's Topics:
  4.  
  5.         AppleShare Volume or Local Volume?
  6.         Default button in a modeless dialogue?
  7.         How difficult to create an AS wrapper for porting?
  8.         How to get Macintosh Name or Owner Name?
  9.         How to receive events in AppleScript script?
  10.         Jasik 12-08 Update available
  11.         Mounting Appleshare Volumes
  12.         PUZZLER: How to get to A5 world in _ExitToShell patch
  13.         Password for mounting remote volumes
  14.         SUMMARY: MacTCP Performance Problems
  15.         [Q] How to find parameter info for traps
  16.         string constants in Metrowerks C code resource?
  17.  
  18.  
  19.  
  20. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  21. (pottier@clipper.ens.fr).
  22.  
  23. The digest is a collection of article threads from the internet newsgroup
  24. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  25. regularly and want an archive of the discussions.  If you don't know what a
  26. newsgroup is, you probably don't have access to it.  Ask your systems
  27. administrator(s) for details.  If you don't have access to news, you may
  28. still be able to post messages to the group by using a mail server like
  29. anon.penet.fi (mail help@anon.penet.fi for more information).
  30.  
  31. Each issue of the digest contains one or more sets of articles (called
  32. threads), with each set corresponding to a 'discussion' of a particular
  33. subject.  The articles are not edited; all articles included in this digest
  34. are in their original posted form (as received by our news server at
  35. nef.ens.fr).  Article threads are not added to the digest until the last
  36. article added to the thread is at least two weeks old (this is to ensure that
  37. the thread is dead before adding it to the digest).  Article threads that
  38. consist of only one message are generally not included in the digest.
  39.  
  40. The digest is officially distributed by two means, by email and ftp.
  41.  
  42. If you want to receive the digest by mail, send email to listserv@ens.fr
  43. with no subject and one of the following commands as body:
  44.     help                                Sends you a summary of commands
  45.     subscribe csmp-digest Your Name     Adds you to the mailing list
  46.     signoff csmp-digest                 Removes you from the list
  47. Once you have subscribed, you will automatically receive each new
  48. issue as it is created.
  49.  
  50. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  51. Questions related to the ftp site should be directed to
  52. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  53. digest are available there.
  54.  
  55. Also, the digests are available to WAIS users.  To search back issues
  56. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  57. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  58.  
  59.  
  60. -------------------------------------------------------
  61.  
  62. >From jms20@po.cwru.edu (John M. Sully)
  63. Subject: AppleShare Volume or Local Volume?
  64. Date: Thu, 01 Dec 1994 10:55:08 -0600
  65. Organization: Library Information Technologies - CWRU
  66.  
  67. Greetings,
  68.    I need to figure out the following about a mounted volume and am not
  69. sure what the "correct" way of doing it is...
  70.  
  71. (1) Is the volume on an Appleshare server?
  72.  
  73. an if so...
  74.  
  75. (2) What is the name of the server it is on?
  76.  
  77. Thanks,
  78. John
  79.  
  80. -- 
  81. - -------------------------------------------------------------------------
  82. | John M. Sully                    | Freiberger Library | Yesterday's     |
  83. | Software Maintenance and         |      Room 305      |    Technology   | 
  84. |    Development Specialist        | voice:(216)368-8989| Solving Today's |
  85. | Library Infomation Technologies  | fax:(216)368-8720  |    Problems     | 
  86. | Case Western Reserve University  | jms20@po.cwru.edu  | Tomorrow        |
  87. - ------------------------------------------------------------------------- 
  88. |        <A HREF="http://x-wing.lit.cwru.edu/">John's Server  </A>        |
  89. - -------------------------------------------------------------------------
  90.  
  91. +++++++++++++++++++++++++++
  92.  
  93. >From jumplong@aol.com (Jump Long)
  94. Date: 12 Dec 1994 01:50:27 -0500
  95. Organization: America Online, Inc. (1-800-827-6364)
  96.  
  97. In article <jms20-0112941055080001@lit35332.lit.cwru.edu>,
  98. jms20@po.cwru.edu (John M. Sully) writes:
  99.  
  100. >(1) Is the volume on an Appleshare server?
  101. >
  102. >an if so...
  103. >
  104. >(2) What is the name of the server it is on?
  105.  
  106. If you just want to find out if the volume is a network volume, call
  107. PBHGetVolParms and look at the vMServerAdr volume returned in the
  108. GetVolParmsInfoBuffer structure.  If vMServerAdr is non-zero, then the
  109. volume is a netowork volume.
  110.  
  111. If you want to find out if a volume is mounted by the AppleShare foreign
  112. file system, then you should first call PBGetVolMountInfoSize.  That will
  113. return the size of the volume mount information record that
  114. PBGetVolMountInfo will return.  Allocate a block big enough for the volume
  115. mount information record and then call PBGetVolMountInfo to fill it in. 
  116. If the media field in the volume mount information record is
  117. AppleShareMediaType, then the volume is an AppleShare volume and you can
  118. get the server name out of the volume mount information record.
  119.  
  120. If you use the routines in Apple's sample code MoreFiles, this is made
  121. pretty easy. For example:
  122.  
  123. OSErr result;
  124. short infoSize;
  125. short theFlags;
  126. short theUAMType;
  127. Str32 theZoneName, theServerName, theVolName, theUserName;
  128.  
  129. result = GetVolMountInfoSize(NULL, vRefNum, &infoSize);
  130. if (result == noErr)
  131. {
  132.   Ptr  volMountInfo = NewPtr((Size)infoSize);
  133.   if (volMountInfo != NULL)
  134.   {
  135.     result = GetVolMountInfo(NULL, vRefNum, volMountInfo);
  136.     if (result == noErr)
  137.     {
  138.       result = RetrieveAFPVolMountInfo((AFPVolMountInfoPtr)volMountInfo,
  139. &theFlags,
  140.                                        &theUAMType, theZoneName,
  141. theServerName,
  142.                                        theVolName, theUserName);
  143.       if (result == paramErr)
  144.       {
  145.         /* volume isn't an AFP volume (RetrieveAFPVolMountInfo returns
  146. paramErr in this case) */
  147.       }
  148.     }
  149.     DisposePtr(volMountInfo);
  150.   }
  151. }
  152. else
  153. {
  154.   /* volume doesn't support volume mount calls so it isn't AppleShare
  155. volume */
  156. }
  157.  
  158. (the code above was typed in here but not test compiled)
  159.  
  160. Hope that helps...
  161.  
  162. - Jim Luther
  163.  
  164. ---------------------------
  165.  
  166. >From ian@eruvia.demon.co.uk (Ian McCall)
  167. Subject: Default button in a modeless dialogue?
  168. Date: 16 Dec 1994 16:02:44 -0600
  169. Organization: UTexas Mail-to-News Gateway
  170.  
  171. Hi.
  172.  
  173. I'm trying to implement a modeless dialogue for the first time, and I've
  174. come across a problem.
  175.  
  176. How do you implement default buttons in a modeless dialogue with editText
  177. fields? I've got the button there, and I've framed it using the dummy
  178. userItem method. However, I can't see how to make it understand that
  179. pressing return/enter is the same as clicking on the OK button.
  180.  
  181. I'm calling IsDialogEvent, followed by DialogSelect in order to determine
  182. which dialogue the event is for. Thing is, DialogSelect 'helpfully'
  183. processes the event for me too. By the time I know both which key has been
  184. pressed and which dialogue it was pressed in, DialogSelect has already
  185. passed it on to the active TextEdit field.
  186.  
  187. I've used return/enter here as examples, but it's also happening when I try
  188. to intercept escape for the 'cancel' button, and all the standard edit
  189. combos (z, x, c, v). As sson as I try to find out which dialogue the
  190. keypresses are in, the events get process anyway and I'm left with an
  191. unwanted character sitting in my editText field.
  192.  
  193.  
  194. Also, whilst I'm here, I'd like to ask for some help on pop-up menus under
  195. System 7. I haven't got all the documentation, but apparently there's a
  196. CDEF I can use in combination with PopUpMenuSelect(). Which CDEF is it,
  197. please? And how would I go about determining that information? This pop-up
  198. is to go in the same modeless dialogue as above, so I assume that what I
  199. need to do is get a handle to the CDEF and then do a SetDItem call - is
  200. that right?
  201.  
  202. Thanks in advance for any information. As I say, I've not done a modeless
  203. dialogue box before and without having all the documentation to hand I'm
  204. finding it a bit awkward.
  205.  
  206. Please reply via email, since I don't actually read this group very often.
  207. It's just too big to use with an online reader and your own phone bill
  208. ticking along in the background...
  209.  
  210.  
  211. Cheers,
  212. Ian
  213.  
  214. (ian@eruvia.demon.co.uk)
  215.  
  216.  
  217.  
  218. +++++++++++++++++++++++++++
  219.  
  220. >From rmah@panix.com (Robert Mah)
  221. Date: Fri, 16 Dec 1994 21:43:32 -0500
  222. Organization: One Step Beyond
  223.  
  224. ian@eruvia.demon.co.uk (Ian McCall) wrote:
  225.  
  226. ) How do you implement default buttons in a modeless dialogue with editText
  227. ) fields? I've got the button there, and I've framed it using the dummy
  228. ) userItem method. However, I can't see how to make it understand that
  229. ) pressing return/enter is the same as clicking on the OK button.
  230. ) I'm calling IsDialogEvent, followed by DialogSelect in order to determine
  231. ) which dialogue the event is for. Thing is, DialogSelect 'helpfully'
  232. ) processes the event for me too. By the time I know both which key has been
  233. ) pressed and which dialogue it was pressed in, DialogSelect has already
  234. ) passed it on to the active TextEdit field.
  235.  
  236. One thing you can do is call the standard filter proc manually using the
  237. CallModalFilterProc macro returned from GetStdFilterProc.  Come to think
  238. of it, calling the StdFilterProc() function may do the trick.  Anyway,
  239. do this before calling DialogSelect() and call it only when it returns
  240. false (or is it true?  Damn, I can never remember).
  241.  
  242. Yes, I know these are usually used with modal dialogs, but they DO work
  243. with modeless dialogs as well.  I use them in a SemiModalDialog() function
  244. I whipped up.
  245.  
  246.  
  247. ) and all the standard edit combos (z, x, c, v). As sson as I try to find
  248. ) out which dialogue the keypresses are in, the events get process anyway
  249. ) and I'm left with an unwanted character sitting in my editText field.
  250.  
  251. You shouldn't pass keydown events with the cmdKey bit of the event.modifiers
  252. field set to DialogSelect.  Trap these out and send them to your menu
  253. command function.  Then, in your Edit menu handler, check to see if the
  254. front window is a dialog.  If so, then call the appropriate DlgXXXX traps.
  255.  
  256.  
  257. ) Also, whilst I'm here, I'd like to ask for some help on pop-up menus under
  258. ) System 7. I haven't got all the documentation, but apparently there's a
  259. ) CDEF I can use in combination with PopUpMenuSelect(). Which CDEF is it,
  260. ) please? And how would I go about determining that information? This pop-up
  261. ) is to go in the same modeless dialogue as above, so I assume that what I
  262. ) need to do is get a handle to the CDEF and then do a SetDItem call - is
  263. ) that right?
  264.  
  265. The procID is 1009.  But there are a few variation codes and each field
  266. in the CNTL resource means something special.  It's documented in Inside
  267. Mac VI as well as one of the new Inside Macs (but I can't remember which).
  268.  
  269. Cheers,
  270. Rob
  271. _______________________________________________________________________
  272. Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  273. One Step Beyond         and Network Consulting           rmah@panix.com
  274.  
  275. ---------------------------
  276.  
  277. >From osiris@cs.utexas.edu (Rob Browning)
  278. Subject: How difficult to create an AS wrapper for porting?
  279. Date: Sun, 11 Dec 1994 13:18:40 -0600
  280. Organization: The University of Texas at Austin
  281.  
  282. There are a number of unix tools that would be useful to have on the Mac
  283. (indent comes to mind).  I was wondering how difficult it would be to
  284. create a library representing a wrapper that could be used to encapsulate
  285. the unix code, turning it into an AppleScriptable application.  It would
  286. be nice to be able to write scripts like this (please excuse my naive AS
  287. syntax):
  288.  
  289. tell application "WordCount" --i.e. wc
  290.    run given parameters:"-l" stdin:"MyDrive:inputFile"
  291. stdout:"MyDrive:outputFile"
  292. end tell
  293.  
  294. or something like this.
  295.  
  296. If this were done, porting some of the unix tools to the mac could be much
  297. more straightforward, and you could chain tools in a manner similar to the
  298. way tools are combined in MPW and unix.  As it stands now, a number of
  299. these tools have been ported, but it is difficult to combine the
  300. standalone versions to do anything useful. 
  301.  
  302. Does anyone have an idea how difficult this would be?
  303.  
  304. Thanks -- Rob
  305.  
  306. +++++++++++++++++++++++++++
  307.  
  308. >From julian@cs.auckland.ac.nz (Julian Harris)
  309. Date: Thu, 15 Dec 1994 18:21:54 +1300
  310. Organization: Computer Science Department, UA
  311.  
  312. In article <osiris-1112941318400001@slip-14-1.ots.utexas.edu>,
  313. osiris@cs.utexas.edu (Rob Browning) wrote:
  314.  
  315. > There are a number of unix tools that would be useful to have on the Mac
  316. > (indent comes to mind).  I was wondering how difficult it would be to
  317. > create a library representing a wrapper that could be used to encapsulate
  318. > the unix code, turning it into an AppleScriptable application.  It would
  319. > be nice to be able to write scripts like this (please excuse my naive AS
  320. > syntax):
  321. > tell application "WordCount" --i.e. wc
  322. >    run given parameters:"-l" stdin:"MyDrive:inputFile"
  323. > stdout:"MyDrive:outputFile"
  324. > end tell
  325. > or something like this.
  326. > Does anyone have an idea how difficult this would be?
  327.  
  328. That could work. You'd 'subclass' the 'oapp' event so that its default
  329. behaviour would be the same (no arguments), but if you give it others,i.e.
  330. stdin and stdout parameters, it would accept them too. It could also do
  331. something tricky with odoc events too, so you can drag a file onto the app
  332. (which would then be the stdin source).
  333.  
  334. Because AppleEvents are sent through events, you'd have two basic states
  335. of the program:
  336.  
  337. - the wrapper which hangs around for the oapp and odoc events (if there are any)
  338.   and if none, brings up the standard ccommand thing that is supplied with
  339.   Symantec and MW.
  340.  
  341. - the core app.
  342.  
  343. Actually it would be better to have the stdin, stdout, parameters, etc
  344. sent in another event so you can do it again when the app is running.
  345.  
  346. But one of the biggest problems with getting unix programs to work is that
  347. they rely on static initialisation of variables. That you have to do
  348. manually, but I agree, it wouldn't be too difficult to do such a thing.
  349. .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
  350. Microsoft is not the answer.                    >  Julian Harris, Programmer   >
  351. Microsoft is the question.                     >  Comp. Sci. Dept.     x8915  >
  352.                                               >  The University of Auckland  >
  353. NO is the answer.                            >  julian@cs.auckland.ac.nz    >
  354.  
  355. +++++++++++++++++++++++++++
  356.  
  357. >From gilbert@marin.cc.ca.us (Tim Gilbert)
  358. Date: Thu, 15 Dec 1994 20:12:31 GMT
  359. Organization: College of Marin, Kentfield, CA 94904
  360.  
  361. Rob Browning (osiris@cs.utexas.edu) wrote:
  362. : There are a number of unix tools that would be useful to have on the Mac
  363. : (indent comes to mind).  I was wondering how difficult it would be to
  364. : create a library representing a wrapper that could be used to encapsulate
  365. : the unix code, turning it into an AppleScriptable application.  It would
  366. : be nice to be able to write scripts like this (please excuse my naive AS
  367. : syntax):
  368.  
  369. : tell application "WordCount" --i.e. wc
  370. :    run given parameters:"-l" stdin:"MyDrive:inputFile"
  371. : stdout:"MyDrive:outputFile"
  372. : end tell
  373.  
  374. : or something like this.
  375.  
  376. This is something that's been kicking around my head for a long time; I
  377. think it's a great idea.  Unfortunately I've never had the System 7 savvy
  378. to work on it.  But here are a few of the ideas I've had:
  379.  
  380.  -- All the simple TextEdit editors in all of those unix ports would be
  381.     unnecessary; stdin could read either from a window or a file (the ProIcon
  382.     environment handles this very nicely).
  383.  
  384.  -- Code size could be drastically reduced; most of the file, console, etc
  385.     stuff in the <ANSI> lib could be replaced by simple AppleEvent calls.
  386.     Further, all apps would use the same (single) stio library, which
  387.     would be essentailly a shared library.
  388.  
  389.  -- My ambition was to write a full ANSI lib that would be in the public
  390.     domain, with strcpy, malloc, fprintf, etc, etc...  Unfortunately I
  391.     don't have the time for any of that now.  But the advantages of
  392.     bundling all those up into a shared library should be clear, I
  393.     think.
  394.  
  395. Somewhere (perhaps the nic.switch.ch source archive?) is a package called
  396. posixlib...  I haven't looked at it yet, but maybe it would provide some
  397. good code to use as a base to start from...
  398.  
  399. Anyways, keep us all posted about what you come up with, if anything,
  400. please...  Good luck!                           -- Tim
  401.  
  402. -- 
  403. Tim Gilbert <> gilbert@marin.cc.ca.us <> College of Marin, S.F. Bay Area
  404.  
  405. +++++++++++++++++++++++++++
  406.  
  407. >From osiris@cs.utexas.edu (Rob Browning)
  408. Date: Fri, 16 Dec 1994 18:57:04 -0600
  409. Organization: The University of Texas at Austin
  410.  
  411. In article <D0vC4v.EK5@marin.cc.ca.us>, gilbert@marin.cc.ca.us (Tim
  412. Gilbert) wrote:
  413.  
  414. > This is something that's been kicking around my head for a long time; I
  415. > think it's a great idea.  Unfortunately I've never had the System 7 savvy
  416. > to work on it.  But here are a few of the ideas I've had:
  417. >  -- All the simple TextEdit editors in all of those unix ports would be
  418. >     unnecessary; stdin could read either from a window or a file (the ProIcon
  419. >     environment handles this very nicely).
  420.  
  421. Quite true.  It would really be nice if the wrapper could be constructed so that
  422. these tools could have their stdin and stdout redirected to your favorite
  423. text editor
  424. (Alpha for me :>), and then you could use the editor's text windows as shell
  425. windows to run the tools.  One of the nice things about this is that the tools
  426. would only be taking up RAM when they are running (instead of the way that
  427. MPW handles tools).  There could also be a flag that determines whether or not
  428. the tool quits after a run or stays open waiting for the next command.
  429.  
  430. I've started looking into what it takes to create an applescriptable app,
  431. (in IM: Interapplication Communications), and it looks like I'm certainly not
  432. yet up to the task.  Hopefully I'll get some time, and can learn the stuff
  433. I need to
  434. know, but it looks like a substantial undertaking...
  435.  
  436. If anyone else gets the urge and knows this stuff better, feel free to go
  437. ahead :>
  438.  
  439. --Rob.
  440.  
  441. +++++++++++++++++++++++++++
  442.  
  443. >From jacobowi@crab.rutgers.edu (Howard Jacobowitz)
  444. Date: 17 Dec 1994 21:41:13 -0500
  445. Organization: Rutgers University
  446.  
  447. osiris@cs.utexas.edu (Rob Browning) writes:
  448.  
  449. >There are a number of unix tools that would be useful to have on the Mac
  450. >(indent comes to mind).  I was wondering how difficult it would be to
  451. >create a library representing a wrapper that could be used to encapsulate
  452. >the unix code, turning it into an AppleScriptable application.  It would
  453. >be nice to be able to write scripts like this (please excuse my naive AS
  454. >syntax):
  455.  
  456. >tell application "WordCount" --i.e. wc
  457. >   run given parameters:"-l" stdin:"MyDrive:inputFile"
  458. >stdout:"MyDrive:outputFile"
  459. >end tell
  460.  
  461. >or something like this.
  462. >If this were done, porting some of the unix tools to the mac could be much
  463. >more straightforward, and you could chain tools in a manner similar to the
  464. >way tools are combined in MPW and unix.  As it stands now, a number of
  465. >these tools have been ported, but it is difficult to combine the
  466. >standalone versions to do anything useful. 
  467.  
  468. >Does anyone have an idea how difficult this would be?
  469.  
  470. >Thanks -- Rob
  471.  
  472. I shouldn't think it would be too hard.  Actually, it would probably
  473. be kind of interesting to work out.  I started something similar to
  474. this once, but never really spent enough time on it to get it to work
  475. decently.
  476.  
  477. +++++++++++++++++++++++++++
  478.  
  479. >From julian@cs.auckland.ac.nz (Julian Harris)
  480. Date: Mon, 19 Dec 1994 14:11:18 +1300
  481. Organization: Computer Science Department, UA
  482.  
  483. In article <osiris-1612941857040001@slip-25-2.ots.utexas.edu>,
  484. osiris@cs.utexas.edu (Rob Browning) wrote:
  485.  
  486. > In article <D0vC4v.EK5@marin.cc.ca.us>, gilbert@marin.cc.ca.us (Tim
  487. > Gilbert) wrote:
  488. > > This is something that's been kicking around my head for a long time; I
  489. > > think it's a great idea.  Unfortunately I've never had the System 7 savvy
  490. > > to work on it.  But here are a few of the ideas I've had:
  491. > > 
  492. > >  -- All the simple TextEdit editors in all of those unix ports would be
  493. > >     unnecessary; stdin could read either from a window or a file (the
  494. ProIcon
  495. > >     environment handles this very nicely).
  496. > Quite true.  It would really be nice if the wrapper could be constructed
  497. so that
  498. > these tools could have their stdin and stdout redirected to your favorite
  499. > text editor
  500.  
  501. <snip>
  502.  
  503. > If anyone else gets the urge and knows this stuff better, feel free to go
  504. > ahead :>
  505.  
  506. Well, it does sound like with Apple events, and the proliferation of
  507. scriptable apps, that it could work reasonably well. One day, in a distant
  508. land, perhaps I could get around to it.
  509.  
  510. I'm just researching IAC myself, and have printed out the relevant
  511. sections on Apple events, object descriptors, and recording (all 500 pages
  512. of it :) and have got lots of neat ideas about how to write a scriptable
  513. app. The first (which is extrememly revolutionary :) is to model your
  514. application in terms of what apple event objects it is comprised of, and
  515. their properties and elements they're associated with.
  516.  
  517. Perhaps when I have a bit more experience with Apple events I could get on
  518. to this. It doesn't sound too hard I reckon.
  519. .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
  520. Microsoft is not the answer.                    >  Julian Harris, Programmer   >
  521. Microsoft is the question.                     >  Comp. Sci. Dept.     x8915  >
  522.                                               >  The University of Auckland  >
  523. NO is the answer.                            >  julian@cs.auckland.ac.nz    >
  524.  
  525. ---------------------------
  526.  
  527. >From tonyc@iconz.co.nz (Tony Cooper)
  528. Subject: How to get Macintosh Name or Owner Name?
  529. Date: 16 Dec 1994 06:20:03 GMT
  530. Organization: Public Access Internet, Auckland New Zealand
  531.  
  532. How do you get the Macintosh Name or Owner Name? I have all the Inside Mac
  533. bookks, all the snippets, and all the Develop Bookmark CDs. But I can't
  534. find this one anywhere.
  535.  
  536. Someone, please put me out of my misery and give me a reference. Mail
  537. to tonyc@iconz.co.nz.
  538.  
  539. Shouldn't Gestalt do this?
  540.  
  541. Thanks
  542. Tony Cooper
  543. tonyc@iconz.co.nz
  544.  
  545.  
  546. +++++++++++++++++++++++++++
  547.  
  548. >From Jaeger@fquest.com (Brian Stern)
  549. Date: 17 Dec 1994 04:21:18 GMT
  550. Organization: The University of Texas at Austin, Austin, Texas
  551.  
  552. In article <3crbil$54s@status>, tonyc@iconz.co.nz (Tony Cooper) wrote:
  553.  
  554. < How do you get the Macintosh Name or Owner Name? I have all the Inside Mac
  555. < bookks, all the snippets, and all the Develop Bookmark CDs. But I can't
  556. < find this one anywhere.
  557. < Someone, please put me out of my misery and give me a reference. Mail
  558. < to tonyc@iconz.co.nz.
  559. < Shouldn't Gestalt do this?
  560. < Thanks
  561. < Tony Cooper
  562. < tonyc@iconz.co.nz
  563.  
  564. You can call GetString() with these constants:
  565.  
  566. const short kChooserNameID = -16096;
  567. const short kMachineNameID = -16413;
  568.  
  569. These 'STR ' resources are in the system file.
  570.  
  571. -- 
  572. Brian  Stern  :-{)}
  573. Toolbox commando and Menu bard
  574. Jaeger@fquest.com
  575.  
  576. +++++++++++++++++++++++++++
  577.  
  578. >From jwbaxter@olympus.net (John W. Baxter)
  579. Date: Fri, 16 Dec 1994 20:44:22 -0800
  580. Organization: Internet for the Olympic Peninsula
  581.  
  582. In article <3crbil$54s@status>, tonyc@iconz.co.nz (Tony Cooper) wrote:
  583.  
  584. > How do you get the Macintosh Name or Owner Name? I have all the Inside Mac
  585. > bookks, all the snippets, and all the Develop Bookmark CDs. But I can't
  586. > find this one anywhere.
  587.  
  588. 'STR ' resource ID -16096 is the user name
  589. 'STR ' resource ID -16413 is the machine name
  590.  
  591. See page 1-127, IM More Mac Toolbox (I have the corner folded over).
  592.  
  593. 'STR ' resource ID -8192 is the printer type (driver name) except when it
  594. isn't.  One situation where it isn't is when QuickDraw GX printing is
  595. installed, when 'STR ' -8192 is the name of the current default desktop
  596. printer.
  597.  
  598. > Mail to tonyc@iconz.co.nz.
  599. Done.
  600.   --John
  601.  
  602. -- 
  603. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  604.    Caesar attended the Senate in a rented toga.
  605.    jwbaxter@pt.olympus.net
  606.  
  607. ---------------------------
  608.  
  609. >From markm@XMission.com (Mark A. Matthews)
  610. Subject: How to receive events in AppleScript script?
  611. Date: Sun, 11 Dec 1994 12:05:46 -0700
  612. Organization: XMission Public Access Internet (801 539 0900)
  613.  
  614.  
  615. I'm trying to write a script which will receive events from Eudora when
  616. mail arrives.  I can convince Eudora to send my script the events, but I
  617. can't figure out how to write the part of the script that is to receive
  618. the event from Eudora.
  619.  
  620. A fragment of AppleScript demonstrating this would help greatly.  Can
  621. anyone provide one?
  622.  
  623. -- 
  624. -Mark
  625.  
  626. +++++++++++++++++++++++++++
  627.  
  628. >From paul@gig.nl (Paul Boots)
  629. Date: Mon, 12 Dec 1994 12:01:00 +0100
  630. Organization: ELECTROGIG Europe
  631.  
  632. In article <markm-1112941205460001@slc34.xmission.com>, markm@XMission.com
  633. (Mark A. Matthews) wrote:
  634.  
  635. > I'm trying to write a script which will receive events from Eudora when
  636. > mail arrives.  I can convince Eudora to send my script the events, but I
  637. > can't figure out how to write the part of the script that is to receive
  638. > the event from Eudora.
  639. > A fragment of AppleScript demonstrating this would help greatly.  Can
  640. > anyone provide one?
  641. > -- 
  642. > -Mark
  643.  
  644.  
  645. Hi Mark,  below some code I tested with Eudora.  It will receive the notice
  646. event sent by Eudora.
  647.  
  648.  
  649. Paul Boots
  650. paul@gig.nl
  651.  
  652. - --
  653. CODE BEGINS
  654. - --
  655. on run
  656.    
  657.    --activate
  658.    --start notifying when mail sent
  659.    --tell application "Eudora1.5.1fc1-1.95" to start notifying
  660.    set WhoIam to the (path to current application as alias)
  661.    tell application "Eudora1.5.1fc1-1.95" to start notifying WhoIam when
  662. mail sent
  663.    
  664. end run
  665.  
  666. on notice messages theMsgList
  667.    tell me to activate
  668.    display dialog "Eudora notified me that it has send the following
  669. messages: " & ,
  670.       return & theMsgList
  671. end notice
  672. - --
  673. END OF CODE
  674. - --
  675.  
  676. ---------------------------
  677.  
  678. >From pottier@triere.ens.fr (Francois Pottier)
  679. Subject: Jasik 12-08 Update available
  680. Date: 10 Dec 1994 13:11:00 GMT
  681. Organization: Ecole Normale Superieure, PARIS, France
  682.  
  683.  
  684. Steve Jasik asked me to post this message here. Note that I am in no
  685. way affiliated with Jasik Designs, I'm just a happy user of The Debugger...
  686.  
  687. - ------------------------------------------------------------------------------
  688.  
  689. 12/8 Jasik Debugger patch Notes - Dec 8, 1994
  690.  
  691. To all Jasik Debugger users:
  692.  
  693. The file '12_08_Dbgr_Patch' is an Application which patchs the
  694. 9/30/94 version of The Debugger.
  695.  
  696. %%%%%JCurrent Fixes/changes - 12/8 %%%%%
  697.  
  698. % auto load CFM LIbraries that we are notified about
  699.         Open Doc users:
  700.         Name your .sym files as Libname.xSym and they will get loaded Automatically
  701.         when the OpenDoc part loads.
  702.  
  703. FIX - Watchpoint to make more reliable, remove warning window
  704.  
  705. fix - Step Into $AAFE (_MixedModeMagic) traps ( 68K -> PPC transitions ) now works
  706.  
  707. fix - change Cursor handling to eliminate turds on PB 5xx Macs
  708.  
  709. fix - when Interrupting a Mac running PowerPC code, xfer to it
  710.  
  711. fix - stack crawl to handle both type of MixedMode switch frames
  712. fix - Discipline & Block Zapping - account for Modern Memory Mgr
  713. fix     - Discipline & ioNamePtr - names can be in ROM
  714. fix -?stack - not processing 3rd arg properly
  715. fix - addresses were truncated to 24 bit values in unstructured asm windows
  716.  
  717. %%%%%JCurrent Fixes/changes - 11/19 %%%%%
  718.  
  719. fix - delete Bkpt's from memory image when deleting a task
  720.  
  721. %%%%%JFixes/changes since 11/15 %%%%%
  722.  
  723. fix - off by 1 in Target Lib command changes - incorrect data seg addr
  724.  
  725. fix - add a 'ppat' resource to Dbgr so it doesn't clear DeskCPat
  726.  
  727. fix - ignore DiskEvents so we don't lose them when we stop at INIT time.
  728.  
  729. %%%%%JFixes/changes since 10/17/94 %%%%%
  730.  
  731. fix - auto unload PPC targeted tasks properly
  732.  
  733. fix - allow absolute address Breakpoints above 16 Meg
  734.                                 display instructions & Bkpts properly in asm windows
  735.  
  736. fix - not listing fields of array properly so they could be modified
  737.  
  738. fix - allow Local Vars window to retain it's All or 1 frame mode
  739.                                 when it becomes dynamic 
  740.  
  741. fix - allow modification of vars in other than the 1st frame.
  742.                                 NOTE: You can't modify Reg Vars in other than Current proc.
  743.  
  744. fix - blowup in _CloseResFile when trying to do SysBeep in 7.5 on IIfx, IIci
  745.  
  746. fix - PACK 3 so we don't get an error trying to access the PowerTalk volumes
  747.  
  748. fix - Garbage task in task tbl due to MF's heap moving when Modern Mem Mgr
  749.                 also cleanup code in Add_AuxTask which was incorrect
  750.  
  751. % extend Target Lib to handle 68K Libs & libs with multiple exec segs
  752.  
  753. fix - ignore SameProcess calls inside Dbgr as Wacom are asshole's
  754.  
  755. fix - problems with Metrowerks .SYM files overflowing NTE limits, etc
  756.  
  757. fix - Undo processing in text windows & memory leaks
  758.                         cmd-delete or Clear forces shrinking of the Text buffer
  759.  
  760. fix - screwed type processing when 1st type was a dup type
  761.  
  762. %%%%%JFixes/changes since 10/10/94 %%%%%J
  763.  
  764. fix - remove code to play with GetResource patch as it assumed Dbgr's
  765.                 patch was 1st on the chain.
  766.                 Fixes problems with System 7.5 & Apple Menu Options
  767.  
  768. fix - a bug in PPC WatchPoint that caused it to hang
  769.  
  770. % add ?stack(fba,stk_top,is_PPC) command to dump an arbitrary stack
  771.         if stk_top = 0 then stk_top := fba + 0C00,
  772.         is_PPC = 1 for stack that starts with PPC stack frames.
  773.         NOTE:  This could be useful for Thread Mgr debugging.
  774.  
  775. % Cmd_Key_Plus flag - If FrontWindow is Read_only then 'Cmd key' is added
  776.                 to any Key press except 'e' and period.
  777.                 You may turn this option OFF with the 'Cmd_Key_Plus' flag.
  778.         NOTE
  779.                 a) remove the PLI_Buf flag from your ROM.dsi
  780.                 b) This option is more convenient than Function Keys for stepping
  781.  
  782. fix - protect against OSDispatch calls inside The Debugger's environment
  783.         by returning 'No such process' for GetFrontProcess, GetNextProcess, I
  784.         Fixes problems with MS Word 6 and FileSharing, etc.
  785.  
  786. %%%%%JFixes/changes since 9/30/94 %%%%%J
  787.  
  788. fix - Metrowerks Global Vars above A5 now works.
  789.  
  790. fix - Allowing periods in the  middle of names broke 'Struct.field' in parser, etc
  791.                 Restrict name syntax to: 'xxx.nn' where n is a number
  792.  
  793. fix - handle 4 byte enums in SYM files correctly
  794.  
  795. Flag CFM Libraries in the Heap Display as: ' CFM Lib: pwpc' 
  796.         =-G - search for symName if addr is in a CFM Library or ROM (like Frown dcmd )
  797.  
  798. Change default NTE Cutoff to $CE00
  799.  
  800. fix - incorrect tabbing in writable windows, also set dialog box properly
  801.  
  802. fix - stepping into a JSR d(A5) didn't alway work
  803.  
  804. fix - MacApp Object displays - prefix window with task number (name too wide),
  805.                 make class tree work for specified subtree, fix Methods of for PPC tasks
  806.  
  807. fix - speed up Cmd-D 'by name' search by NOT searching for a ROM name
  808.                         unless already in the ROM task
  809.  
  810. %%%%%JTo update your version of The Debugger%%%%%%:
  811.  
  812. A) Open up the folder 'Dbgr/Nosy files' and 
  813.    change the name of of the 9/30/94 version of 'The Debugger'
  814.    to: '9/30/94 The Debugger'
  815.  
  816. B) Dbl-click on the UpdateMaker file '12_08_Dbgr_Patch'
  817.    to create a new version of 'The Debugger' 
  818.          (in the 'Dbgr/Nosy files' folder).
  819.  
  820. % NOTE: If the patch program complains that FONT resources
  821. % don't match, then try Booting with Extensions OFF
  822. % (shift key down while booting) and try the Updater again.
  823.  
  824.  
  825. You may verify that you are running the newer version
  826. of The Debugger by checking the 4th line of the '-Notes-'
  827. window when you re-boot with The Debugger installed.
  828.  
  829. It should read:
  830. USR_SG =   nnnn The Debugger - V2.7.5-PPC 12/8/94
  831.                                           -------
  832. Steve Jasik
  833. -- 
  834. Francois Pottier                                            pottier@dmi.ens.fr
  835. - ----------------------------------------------------------------------------
  836. Check my WWW page at http://acacia.ens.fr:8080/home/pottier/index.html ...
  837.  
  838. ---------------------------
  839.  
  840. >From brianv@serv0.cae.wisc.edu (brianv)
  841. Subject: Mounting Appleshare Volumes
  842. Date: 7 Dec 1994 23:50:08 GMT
  843. Organization: Division of Information Technology
  844.  
  845. Hello, 
  846. I have been fighting with my mac trying to get it to mount an
  847. Appleshare volume located on an ethernet network using the command
  848. PBVolumeMount().
  849. However, I haven't had any luck.  Can anyone send me some code where
  850. they have had success doing this? 
  851.  
  852. Thanks,
  853. Brian Vanderpool
  854. brianv@cae.wisc.edu
  855.  
  856. +++++++++++++++++++++++++++
  857.  
  858. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  859. Date: Sun, 11 Dec 1994 15:50:34 +0800
  860. Organization: Department of Computer Science, University of Western Australia
  861.  
  862. In article <3c5hng$ghd@news.doit.wisc.edu>, brianv@serv0.cae.wisc.edu
  863. (brianv) wrote:
  864.  
  865. >I have been fighting with my mac trying to get it to mount an
  866. >Appleshare volume located on an ethernet network using the command
  867. >PBVolumeMount().
  868.  
  869. Did this just the other day...
  870.  
  871.   function MountAFPVolume(zone, server, vol, user, password : Str32;
  872.                var mountedVRefNum : integer) : OSErr;
  873.     var
  874.       info: AFPVolMountInfo;
  875.       cur_offset: integer;
  876.  
  877.     function CopyString (s: Str32): integer;
  878.     begin
  879.       CopyString := cur_offset + 23;      (* 23 = header size - 1 (because
  880. the AFPData array is 1 based) *)
  881.       BlockMove(@s, @info.AFPData[cur_offset], length(s) + 1);
  882.       cur_offset := cur_offset + length(s) + 1;
  883.     end; (* CopyString *)
  884.  
  885.     var
  886.       pb: ParamBlockRec;
  887.       err : OSErr;
  888.   begin
  889.     mountedVRefNum := 0;
  890.     info.length := sizeof(info);
  891.     info.media := AppleShareMediaType;
  892.     info.flags := 0;
  893.     info.nbpInterval := 0;
  894.     info.nbpCount := 0;
  895.     info.uamType := kTwoWayEncryptPassword;
  896.     cur_offset := 1;
  897.     info.zoneNameOffset := CopyString(zone);
  898.     info.serverNameOffset := CopyString(server);
  899.     info.volNameOffset := CopyString(vol);
  900.     info.userNameOffset := CopyString(user);
  901.     info.userPasswordOffset := CopyString(password);
  902.     info.volPasswordOffset := CopyString('');
  903.     with pb do begin (* safe *)
  904.       pb.ioBuffer := @info;
  905.     end; (* with *)
  906.     err := PBVolumeMount(@pb);
  907.     if err = noErr then begin
  908.       mountedVRefNum := pb.ioVRefNum;
  909.     end; (* if *)
  910.     MountAFPVolume := err;
  911.   end; (* MountAFPVolume *)
  912.  
  913. Share and Enjoy.
  914. --
  915. Quinn "The Eskimo!"                   "Ah ha, the carnage begins!"
  916.  
  917. +++++++++++++++++++++++++++
  918.  
  919. >From jumplong@aol.com (Jump Long)
  920. Date: 12 Dec 1994 00:40:15 -0500
  921. Organization: America Online, Inc. (1-800-827-6364)
  922.  
  923. In article <3c5hng$ghd@news.doit.wisc.edu>, brianv@serv0.cae.wisc.edu
  924. (brianv) writes:
  925.  
  926. >I have been fighting with my mac trying to get it to mount an Appleshare
  927. >volume located on an ethernet network using the command PBVolumeMount().
  928. >However, I haven't had any luck.  Can anyone send me some code where
  929. >they have had success doing this? 
  930.  
  931. Brian, Apple's sample code MoreFiles has a routine named
  932. BuildAFPVolMountInfo which will correctly built the mounting record for
  933. you. MoreFiles also has a high-level version of PBVolumeMount that you
  934. might find useful.
  935.  
  936. If you need the user to enter their name and password, you can let the
  937. system take care of that for you by using NewAliasMinimalFromFullPath and
  938. then ResolveAlias.
  939.  
  940. - Jim Luther
  941.  
  942. ---------------------------
  943.  
  944. >From scouten@uiuc.edu (Eric Scouten)
  945. Subject: PUZZLER: How to get to A5 world in _ExitToShell patch
  946. Date: Tue, 06 Dec 1994 16:55:05 -0600
  947. Organization: University of Illinois
  948.  
  949. Howdy,
  950.  
  951. I have an application that sets up lots of interrupt-level stuff
  952. (particularly sound channels). These, of course, have lots of asynchronous
  953. callback routines.
  954. To avoid the problem of leaving these things hanging when somebody (often
  955. myself, via the debugger or MacsBug) aborts the application via
  956. ExitToShell, I'm writing an ETS patch.
  957.  
  958. All works fine when I do kill process from the MW Debugger, but *most* of
  959. the time when I hit the programmer's switch and do "es" from MacsBug, the
  960. A5 world is off the wall. (From what I can tell, I hit the NMI while the
  961. Toolbox was doing something for my app.) I need A5 to get to my list of
  962. things to close, but I can't figure any way to save a copy of A5 for
  963. myself. Static variables won't do, since they're all A5-indexed; the usual
  964. trick of extending the parameter block (for Time Manager tasks, etc., as
  965. documented in Develop) won't work since ETS has no parameter block.
  966.  
  967. So I'm confused... anybody got bright ideas?
  968.  
  969. -es
  970.  
  971. __________________________________________________________________________
  972. Eric Scouten <scouten@uiuc.edu> * MS Comp Sci '96, Univ of Illinois
  973.  
  974. Universities seem happiest when they are closest to anarchy.
  975.    -Bill DiBrito
  976.  
  977. +++++++++++++++++++++++++++
  978.  
  979. >From Matt Slot <fprefect@engin.umich.edu>
  980. Date: 7 Dec 1994 00:38:17 GMT
  981. Organization: University of Michigan
  982.  
  983. There is a lomem global called CurrentA5 which saves the valid A5 from the
  984. current context.
  985.  
  986. That should do it.
  987.  
  988. Matt
  989.  
  990. +++++++++++++++++++++++++++
  991.  
  992. >From scouten@uiuc.edu (Eric Scouten)
  993. Date: Tue, 06 Dec 1994 21:15:08 -0600
  994. Organization: University of Illinois
  995.  
  996. In article <3c305p$2ju@controversy.math.lsa.umich.edu>, Matt Slot
  997. <fprefect@engin.umich.edu> wrote:
  998.  
  999. > There is a lomem global called CurrentA5 which saves the valid A5 from the
  1000. > current context.
  1001.  
  1002. Duhhh... of course. Thanks for reminding me. :)
  1003.  
  1004. Must have been the lack of sleep.
  1005.  
  1006. -es
  1007.  
  1008. __________________________________________________________________________
  1009. Eric Scouten <scouten@uiuc.edu> * MS Comp Sci '96, Univ of Illinois
  1010.  
  1011. We're putting out fires with gasoline.
  1012.    -David Bowie
  1013.  
  1014. +++++++++++++++++++++++++++
  1015.  
  1016. >From gurgle@dnai.com (Pete Gontier)
  1017. Date: Tue, 06 Dec 1994 20:40:56 -0700
  1018. Organization: cellular
  1019.  
  1020. In article <scouten-0612941655050001@saguaro.cso.uiuc.edu>,
  1021. scouten@uiuc.edu (Eric Scouten) wrote:
  1022.  
  1023. > I have an application that sets up lots of interrupt-level stuff
  1024. > (particularly sound channels)... To avoid the problem of leaving
  1025. > these things hanging (upon an unexpected call to) ExitToShell,
  1026. > I'm writing an ETS patch.
  1027. > All works fine when I do kill process from the MW Debugger, but *most* of
  1028. > the time when I hit the programmer's switch and do "es" from MacsBug, the
  1029. > A5 world is off the wall.
  1030.  
  1031. The programmer's switch induces an NMI regardless of the code being
  1032. executed. It may be the code from some other app, it may be trap code, it
  1033. may be one of your completion routines -- anything. So yes, A5 can be
  1034. wacky when you hit that NMI.
  1035.  
  1036. However, this is not a problem having to do with A5, really. The real
  1037. problem is the fact that you are inducing that NMI when code other than
  1038. that of your app is running. Doing an 'es' under these circumstances is
  1039. dangerous for a number of reasons, *not* the most important of which is
  1040. that A5 is not set up correctly (because you can easily fix that in your
  1041. patch by -- theoretically -- getting the "correct" value from the low
  1042. memory global CurrentA5). It may also be the case that your app's heap is
  1043. not the current heap, your app's copy of the low memory globals has not
  1044. been swapped in, and a number of other things, some of which only Apple
  1045. engineers are aware.
  1046.  
  1047. So the problem is not your patch but the timing of your 'es' command.
  1048.  
  1049. What I do to insure everything is set up correctly for me to do an 'es'
  1050. against any app is to drag a window or pull down a menu, keeping the mouse
  1051. button held down, invoke MacsBug (most often by holding down the command
  1052. key with my free thumb and depressing the power key with my nose), type
  1053. 'atba', command-G, and release the mouse. (Probably I had to release the
  1054. mouse to type the MacsBug command, but you get the idea.) The click/hold
  1055. sequence ensures that the front app is the current app. As soon as the app
  1056. calls its next trap (probably the one right after DragWindow or
  1057. MenuSelect), MacsBug steps in. Then I know it's probably a little more
  1058. safe to do 'es'. If it's my app, then I know for sure it's safe, because
  1059. I've patched ExitToShell like you are doing. :-)
  1060.  
  1061. +++++++++++++++++++++++++++
  1062.  
  1063. >From alexm@cts.com (Alex Maluta)
  1064. Date: Wed, 7 Dec 1994 09:38:40 GMT
  1065. Organization: /etc/organization
  1066.  
  1067. Eric,
  1068.  
  1069. > All works fine when I do kill process from the MW Debugger, but *most* of
  1070. > the time when I hit the programmer's switch and do "es" from MacsBug, the
  1071. > A5 world is off the wall. (From what I can tell, I hit the NMI while the
  1072. > Toolbox was doing something for my app.) I need A5 to get to my list of
  1073. > things to close, but I can't figure any way to save a copy of A5 for
  1074. > myself. Static variables won't do, since they're all A5-indexed; the usual
  1075. > trick of extending the parameter block (for Time Manager tasks, etc., as
  1076. > documented in Develop) won't work since ETS has no parameter block.
  1077.  
  1078. I haven't tried this in exactly your case, but a quick look at TCL 1.1.3
  1079. (which does patch ExitToShell) shows that they get at globals by simply
  1080. calling SetCurrentA5().  It's too early in the morning for me to figure
  1081. out if this is exactly what you're looking for, but hopefully it'll help.
  1082.  
  1083. -Alex
  1084.  
  1085. +++++++++++++++++++++++++++
  1086.  
  1087. >From hawkfish@halcyon.com (Richard Wesley)
  1088. Date: 7 Dec 1994 15:41:48 GMT
  1089. Organization: Punch Deck Consulting
  1090.  
  1091. In article <scouten-0612941655050001@saguaro.cso.uiuc.edu>
  1092. scouten@uiuc.edu (Eric Scouten) writes:
  1093.  
  1094. > All works fine when I do kill process from the MW Debugger, but *most* of
  1095. > the time when I hit the programmer's switch and do "es" from MacsBug, the
  1096. > A5 world is off the wall. (From what I can tell, I hit the NMI while the
  1097. > Toolbox was doing something for my app.) I need A5 to get to my list of
  1098. > things to close, but I can't figure any way to save a copy of A5 for
  1099. > myself. Static variables won't do, since they're all A5-indexed; the usual
  1100. > trick of extending the parameter block (for Time Manager tasks, etc., as
  1101. > documented in Develop) won't work since ETS has no parameter block.
  1102.  
  1103. Try using SetCurrentA5.
  1104.  
  1105. rmgw
  1106.  
  1107. +++++++++++++++++++++++++++
  1108.  
  1109. >From Matt Slot <fprefect@engin.umich.edu>
  1110. Date: 7 Dec 1994 20:49:06 GMT
  1111. Organization: University of Michigan
  1112.  
  1113. Pete Gontier, gurgle@dnai.com writes:
  1114.  > However, this is not a problem having to do with A5, really. The real
  1115.  > problem is the fact that you are inducing that NMI when code other than
  1116.  > that of your app is running. Doing an 'es' under these circumstances is
  1117.  > dangerous for a number of reasons, *not* the most important of which is
  1118.  > that A5 is not set up correctly (because you can easily fix that in your
  1119.  > patch by -- theoretically -- getting the "correct" value from the low
  1120.  > memory global CurrentA5). It may also be the case that your app's heap is
  1121.  > not the current heap, your app's copy of the low memory globals has not
  1122.  > been swapped in, and a number of other things, some of which only Apple
  1123.  > engineers are aware.
  1124.  
  1125. If I use the debugger to 'es', it will kill the current app -- not the
  1126. owner of the interrupt based routine you are in -- based on the switched in
  1127. heap. You shouldn't have to worry about being exited when your app isn't
  1128. in context. (I believe this, but have no confirmation).
  1129.  
  1130. Doing an 'es' from anyone else's context should be safe enough to your 
  1131. interrupt routines if you have placed them in your heap or the system heap --
  1132. but don't trust another app's heap, that would be bad. If you don't
  1133. care for cleanliness and don't depend on globals from your app's heap, 
  1134. you can place your buffers/routines in the system heap. When you drop out,
  1135. they will simply keep operating -- I know its not pretty, but fairly quick
  1136. and safe.
  1137.  
  1138. The only issue is to restore a valid globals context when you get the
  1139. 'es' when your app is current, so that you can get the info about those
  1140. routines you installed.
  1141.  
  1142. Matt
  1143.  
  1144. +++++++++++++++++++++++++++
  1145.  
  1146. >From reinder@neuretp.biol.ruu.nl (Reinder Verlinde)
  1147. Date: Thu, 8 Dec 1994 19:00:32 GMT
  1148. Organization: Rijksuniversiteit Utrecht
  1149.  
  1150. In article <gurgle-0612942040560001@mac.kat.gurgle>, gurgle@dnai.com (Pete
  1151. Gontier) wrote:
  1152.  
  1153. > ...
  1154. > What I do to insure everything is set up correctly for me to do an 'es'
  1155. > against any app is to drag a window or pull down a menu, keeping the mouse
  1156. > button held down, invoke MacsBug (most often by holding down the command
  1157. > key with my free thumb and depressing the power key with my nose), type
  1158. > 'atba', command-G, and release the mouse. (Probably I had to release the
  1159. > mouse to type the MacsBug command, but you get the idea.) The click/hold
  1160. > sequence ensures that the front app is the current app. As soon as the app
  1161. > calls its next trap (probably the one right after DragWindow or
  1162. > MenuSelect), MacsBug steps in. Then I know it's probably a little more
  1163. > safe to do 'es'. If it's my app, then I know for sure it's safe, because
  1164. > I've patched ExitToShell like you are doing. :-)
  1165. >
  1166. > ...
  1167.  
  1168. The easier way to obtain the same result is to use a FKEY to enter MacsBug.
  1169. To prevent nasty surprises when MacsBug is not installed (which should not
  1170. happen often) one should use a FKEY like:
  1171.  
  1172. #define MacJmp 0x120
  1173.  
  1174. void main()
  1175. {
  1176.     asm
  1177.     {
  1178.         move.l  MacJmp,D0
  1179.         and.l   #0x7FFFFFFF,D0
  1180.         beq.s   @noDebuggerPresent
  1181.         dc.w    _Debugger
  1182.         rts
  1183.     
  1184.     noDebuggerPresent:
  1185.         Move.w  #0x09,-(sp)
  1186.         dc.w    _SysBeep
  1187. //      rts     automatically included at end by Think C
  1188.     }
  1189. }
  1190.  
  1191. or in hex (can be pasted into an empty FKEY resource in ResEdit):
  1192.  
  1193. 2038012002807FFFFFFF6704A9FF4E753F3C0009A9C84E75
  1194.  
  1195. I don't know whether it works with all debuggers, but it does work
  1196. fine for me (I got the information on Debugger detection from an Apple
  1197. Technote called 'PT 535 - MacsBug Q&As'. I'm not sure whether I
  1198. followed the note completely; I remember detecting an inconsistency
  1199. between its text and some Macs I examined)
  1200.  
  1201. Reinder Verlinde
  1202.  
  1203. +++++++++++++++++++++++++++
  1204.  
  1205. >From gurgle@dnai.com (Pete Gontier)
  1206. Date: Tue, 13 Dec 1994 15:24:44 -0700
  1207. Organization: cellular
  1208.  
  1209. In article <reinder-0812942000320001@neuretc.biol.ruu.nl>, 
  1210. reinder@neuretp.biol.ruu.nl (Reinder Verlinde) wrote:
  1211.  
  1212. > The easier way to obtain the same result is to use a FKEY to enter MacsBug.
  1213.  
  1214. Yes, but...
  1215.  
  1216.    (1) FKEYs don't work unless GNE is getting called periodicially.
  1217.    (2) I *like* hitting the power key with my nose. Who are you to
  1218.        tell me I shouldn't? :-)
  1219.  
  1220. -- 
  1221.  
  1222.  Pete Gontier // MacZealotry, Ink. // gurgle@dnai.com
  1223.  
  1224.  Where do I want to go today? Anywhere but Chicago.
  1225.  
  1226. +++++++++++++++++++++++++++
  1227.  
  1228. >From dnebing@andy.bgsu.edu (bgsuvax)
  1229. Date: 9 Dec 1994 23:39:27 GMT
  1230. Organization: Bowling Green State University
  1231.  
  1232. scouten@uiuc.edu (Eric Scouten) writes:
  1233. > Howdy,
  1234. > I have an application that sets up lots of interrupt-level stuff
  1235. > (particularly sound channels). These, of course, have lots of asynchronous
  1236. > callback routines.
  1237. > To avoid the problem of leaving these things hanging when somebody (often
  1238. > myself, via the debugger or MacsBug) aborts the application via
  1239. > ExitToShell, I'm writing an ETS patch.
  1240.  
  1241.   The following code works well for me...
  1242.  
  1243.   There are two functions to this.  The first is InstallExitToShellPatch
  1244. which takes a procedure pointer for the procedure that you want to
  1245. to be called when the app is quitting.  InstallExitToShellPatch patches
  1246. ExitToShell to call the second function, CallExitToShells.
  1247.  
  1248. How it works:
  1249.  
  1250.   InstallExitToShellPatch builds a list of procedure pointers.  Every
  1251. time that you call InstallExitToShellPatch, the procedure is added
  1252. to the queue.  When your app quits and the CallExitToShells procedure
  1253. is called, it sets up the A5 world and then starts calling the procedures
  1254. in the list (last in, first out).
  1255.  
  1256.   Three files are included.  ExitToShell Patch.c and ExitToShell Patch.h,
  1257. as well as a small file (named main.c) that demonstrates how to use
  1258. the routines.
  1259.  
  1260. Enjoy,
  1261.  
  1262.   Dave
  1263.  
  1264. ============================================================
  1265. Dave Nebinger                    dnebing@bgsuvax.bgsu.edu
  1266. Network Manager, Biology Dept.   dnebing@opie.bgsu.edu
  1267. Bowling Green State University   dnebing@bgsuopie (bitnet)
  1268. Bowling Green, OH 43403          #include <std_disclaimer.h>
  1269.  
  1270.             Mighty 'Moof-in' PowerPC Ranger
  1271.  
  1272. /*
  1273.         ExitToShell Patch.h
  1274.  
  1275.         Header file for ExitToShell Patch.c
  1276.  
  1277. */
  1278.  
  1279. #pragma once
  1280.  
  1281. #ifndef __H_ExitToShell_Patch__
  1282. #define __H_ExitToShell_Patch__
  1283.  
  1284. #include <Memory.h>
  1285. #include <SegLoad.h>
  1286.  
  1287. typedef pascal void (*ExitToShellProcPtr)(void);
  1288.  
  1289. enum {
  1290.         uppExitToShellProcInfo = kPascalStackBased
  1291. };
  1292.  
  1293. #if USESROUTINEDESCRIPTORS
  1294. typedef UniversalProcPtr ExitToShellUPP;
  1295.  
  1296. #define CallExitToShellProc(userRoutine)        \
  1297.         CallUniversalProcPtr((UniversalProcPtr)(userRoutine),uppExitToShellProcInfo)
  1298. #define NewExitToShellProc(userRoutine) \
  1299.         (ExitToShellUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppExitToShellProcInfo,\
  1300.                 GetCurrentISA())
  1301.  
  1302. #else
  1303. typedef ExitToShellProcPtr ExitToShellUPP;
  1304.  
  1305. #define CallExitToShellProc(userRoutine)        \
  1306.         (*(userRoutine))()
  1307. #define NewExitToShellProc(userRoutine) \
  1308.         (ExitToShellUPP)(userRoutine)
  1309. #endif
  1310.  
  1311. #define DisposeExitToShellProc(userRoutine)\
  1312.         DisposeRoutineDescriptor(userRoutine)
  1313.  
  1314. #if defined(powerc)||defined(__powerc)
  1315. #pragma options align=mac68k
  1316. #endif
  1317. struct ExitToShellUPPList{
  1318.         struct ExitToShellUPPList* nextProc;
  1319.         ExitToShellUPP userProc;
  1320. };
  1321. #if defined(powerc)||defined(__powerc)
  1322. #pragma options align=reset
  1323. #endif
  1324.  
  1325. typedef struct ExitToShellUPPList ExitToShellUPPList,* ExitToShellUPPListPtr,** ExitToShellUPPHdl;
  1326.  
  1327. #if defined(powerc)||defined(__powerc)
  1328. #pragma options align=mac68k
  1329. #endif
  1330. struct ExitToShellDataStruct{
  1331.         unsigned long a5;
  1332.         short numUserProcs;
  1333.         ExitToShellUPPList* userProcs;
  1334.         ExitToShellUPP oldProc;
  1335. };
  1336. #if defined(powerc)||defined(__powerc)
  1337. #pragma options align=reset
  1338. #endif
  1339.  
  1340. typedef struct ExitToShellDataStruct ExitToShellDataRec,* ExitToShellDataPtr,** ExitToShellDataHdl;
  1341.  
  1342. extern ExitToShellDataPtr gExitToShellData;
  1343.  
  1344. #ifdef __cplusplus
  1345. extern "C" {
  1346. #endif
  1347.  
  1348. OSErr InstallExitToShellPatch(ExitToShellProcPtr newProc);
  1349. static pascal void CallExitToShells(void);
  1350.  
  1351. #ifdef __cplusplus
  1352. }
  1353. #endif
  1354.  
  1355. #endif
  1356.  
  1357.  
  1358.  
  1359. /****************  End Of File! ***************/
  1360.  
  1361.  
  1362. /*
  1363.         ExitToShell Patch.c
  1364.  
  1365.         Patches ExitToShell to call a user routine.  With the advent of UPPs and MixedMode, it gets
  1366.         harder to patch things correctly.  Anyway, InstallExitToShellPatch takes an 'old' ProcPtr and
  1367.         creates the necessary UPP which NSetTrapAddress now requires.  Hopefully everything is
  1368.         done correctly... ;-)  CallExitToShells, the intermediary procedure, ensures that A5 is set
  1369.         up correctly for the application before calling the custom ExitToShell routine.
  1370.  
  1371.         8/14/94 dn - Created.
  1372.  
  1373.         11/31/94 dn - Major modifications!
  1374.                 Modified to allow multiple ExitToShell patches.  Basically, this just builds a list of procedures to
  1375.                 call before exiting the program.
  1376. */
  1377.  
  1378. #include "ExitToShell Patch.h"
  1379.  
  1380. static ExitToShellDataPtr gExitToShellData=(ExitToShellDataPtr)0L;
  1381.  
  1382. /*
  1383.         InstallExitToShellPatch
  1384.  
  1385.         Installs the ExitToShell patch (obviously ;-).  In the data structure for gExitToShellData is stored the
  1386.         current value of the A5 register, the UPP for the routine that should be called first, then the UPP for
  1387.         the routine that was originally there.  ExitToShell is then patched to call the 'CallExitToShells' which
  1388.         handles all of the garbage for setting up the A5 register, etc., before calling the two routines.
  1389.  
  1390.         (patching ExitToShell info/example comes from TCL 1.1.3 CApplication.c, ) Symantec, Inc.)
  1391. */
  1392. OSErr InstallExitToShellPatch(ExitToShellProcPtr newProc){
  1393.         short etsTrap;
  1394.         ExitToShellUPP oldETS,newETS,callETS;
  1395.         ExitToShellUPPListPtr lp;
  1396.         long oldETSTrap,newETSTrap;
  1397.         OSErr err;
  1398.  
  1399.         if (gExitToShellData==(ExitToShellDataPtr)0L){
  1400.                 // the patches have not been initialized, set it up first...
  1401.  
  1402.                 // allocate the memory to hold the information...
  1403.                 gExitToShellData=(ExitToShellDataPtr)NewPtr(sizeof(ExitToShellDataRec));
  1404.  
  1405.                 // save the value of register a5
  1406.                 gExitToShellData->a5=SetCurrentA5();
  1407.  
  1408.                 // init the number of user procs.
  1409.                 gExitToShellData->numUserProcs=0;
  1410.                 gExitToShellData->userProcs=(ExitToShellUPPList*)0L;
  1411.  
  1412.                 // now set up the UPP for the original ExitToShell
  1413.                 etsTrap=_ExitToShell & 0x3ff;                                                           // set up trap value...
  1414.                 callETS=NewExitToShellProc(CallExitToShells);                                   // get the UPP for intermediary proc
  1415.                 oldETS=(ExitToShellUPP)NGetTrapAddress(etsTrap,ToolTrap);               // get the old trap UPP...
  1416.                 NSetTrapAddress((UniversalProcPtr)callETS,etsTrap,ToolTrap);    // set to the intermediary proc
  1417.                 gExitToShellData->oldProc=oldETS;                                                       // save the old ETS UPP
  1418.  
  1419.         }
  1420.  
  1421.         // get the upp for the new replacement proc
  1422.         newETS=NewExitToShellProc(newProc);
  1423.  
  1424.         // allocate a new node...
  1425.         lp=(ExitToShellUPPListPtr)NewPtrClear(sizeof(ExitToShellUPPList));
  1426.         lp->userProc=newETS;
  1427.  
  1428.         // put it into the chain...
  1429.         lp->nextProc=gExitToShellData->userProcs;
  1430.         gExitToShellData->userProcs=lp;
  1431.         gExitToShellData->numUserProcs++;
  1432.  
  1433.         return noErr;
  1434. }
  1435.  
  1436. /*
  1437.         CallExitToShells
  1438.  
  1439.         First this routine calls the user's ExitToShell routines, then it calls the original
  1440.         ExitToShell trap routine.  That's why it is referred to as the intermediary procedure
  1441.         in InstallETSPatch.
  1442. */
  1443. static pascal void CallExitToShells(){
  1444.         OSErr err,err2;
  1445.         long oldA5=SetCurrentA5(); // get the current value for register A5 and set it to the application's A5
  1446.         ExitToShellUPP oldETS;
  1447.         ExitToShellUPPListPtr nextProc,curProc;
  1448.  
  1449.         SetA5(gExitToShellData->a5);
  1450.  
  1451.         if (gExitToShellData->numUserProcs>0){
  1452.                 // call the user's routines
  1453.  
  1454.                 // get the first routine
  1455.                 curProc=gExitToShellData->userProcs;
  1456.  
  1457.                 // loop though the procedures...
  1458.                 do {
  1459.                         // set up for the next routine
  1460.                         nextProc=curProc->nextProc;
  1461.  
  1462.                         // call the procedure
  1463.                         CallExitToShellProc(curProc->userProc);
  1464.  
  1465.                         // dispose of the UPP
  1466.                         DisposeExitToShellProc(curProc->userProc);
  1467.  
  1468.                         // dispose of the list entry
  1469.                         DisposePtr((Ptr)curProc);
  1470.  
  1471.                         curProc=nextProc;
  1472.                 } while (curProc!=(ExitToShellUPPListPtr)0L);
  1473.                 // done!
  1474.         }
  1475.  
  1476.         // prepare to call the original ExitToShell
  1477.         oldETS=gExitToShellData->oldProc;
  1478.  
  1479.         // dispose of the memory gExitToShellData holds
  1480.         DisposePtr((Ptr)gExitToShellData);
  1481.  
  1482.         // restore the old a5
  1483.         SetA5(oldA5);
  1484.  
  1485.         // now call the original ExitToShell
  1486.         CallExitToShellProc(oldETS);
  1487.  
  1488.         return;
  1489. }
  1490.  
  1491.  
  1492.  
  1493. /***********  End Of File! **************/
  1494.  
  1495.  
  1496. /*
  1497.         main.c
  1498.  
  1499. */
  1500.  
  1501. #include "ExitToShell Patch.h"
  1502.  
  1503. pascal void proc1(void);
  1504. pascal void proc2(void);
  1505. pascal void proc3(void);
  1506.  
  1507. main(){
  1508.  
  1509.         InitMac();// self explanatory
  1510.  
  1511.         InstallExitToShellPatch(proc1);
  1512.  
  1513.         InstallExitToShellPatch(proc2);
  1514.  
  1515.         InstallExitToShellPatch(proc3);
  1516.  
  1517. }
  1518.  
  1519. pascal void proc1(){
  1520.         long time;
  1521.  
  1522.         SysBeep();
  1523.         Delay(120,&time); // needed to get the beeps to happen
  1524. }
  1525.  
  1526. pascal void proc2(){
  1527.         long time;
  1528.  
  1529.         SysBeep();
  1530.         SysBeep();
  1531.         Delay(120,&time); // needed to get the beeps to happen
  1532. }
  1533.  
  1534. pascal void proc3(){
  1535.         long time;
  1536.  
  1537.         SysBeep();
  1538.         SysBeep();
  1539.         SysBeep();
  1540.         Delay(120,&time); // needed to get the beeps to happen
  1541. }
  1542.  
  1543.  
  1544. +++++++++++++++++++++++++++
  1545.  
  1546. >From phils@bedford.symantec.com (Phil Shapiro)
  1547. Date: Fri, 16 Dec 1994 10:07:02 -0500
  1548. Organization: Symantec Corp.
  1549.  
  1550. In article <3caprf$bf@falcon.bgsu.edu>, dnebing@andy.bgsu.edu (bgsuvax) wrote:
  1551.  
  1552. | scouten@uiuc.edu (Eric Scouten) writes:
  1553. | > I have an application that sets up lots of interrupt-level stuff
  1554. | > (particularly sound channels). These, of course, have lots of asynchronous
  1555. | > callback routines.
  1556. | > To avoid the problem of leaving these things hanging when somebody (often
  1557. | > myself, via the debugger or MacsBug) aborts the application via
  1558. | > ExitToShell, I'm writing an ETS patch.
  1559. |   The following code works well for me...
  1560. |   There are two functions to this.  The first is InstallExitToShellPatch
  1561. | which takes a procedure pointer for the procedure that you want to
  1562. | to be called when the app is quitting.  InstallExitToShellPatch patches
  1563. | ExitToShell to call the second function, CallExitToShells.
  1564. | How it works:
  1565. |   InstallExitToShellPatch builds a list of procedure pointers.  Every
  1566. | time that you call InstallExitToShellPatch, the procedure is added
  1567. | to the queue.  When your app quits and the CallExitToShells procedure
  1568. | is called, it sets up the A5 world and then starts calling the procedures
  1569. | in the list (last in, first out).
  1570. |   Three files are included.  ExitToShell Patch.c and ExitToShell Patch.h,
  1571. | as well as a small file (named main.c) that demonstrates how to use
  1572. | the routines.
  1573.  
  1574. Anyone who has THINK C or Symantec C++ already has this -- it's called
  1575. "atexit()". If you register a function with atexit(), it's called at
  1576. ExitToShell time with the correct A5, automatically.
  1577.  
  1578. It doesn't support PowerPC patching of ETS, though. I believe that the CDK
  1579. comes with a PowerPC version of atexit() that uses __term instead of
  1580. patching ETS.
  1581.  
  1582.    -phil
  1583.  
  1584. +++++++++++++++++++++++++++
  1585.  
  1586. >From dnebing@andy.bgsu.edu (bgsuvax)
  1587. Date: 16 Dec 1994 19:49:08 GMT
  1588. Organization: Bowling Green State University
  1589.  
  1590. phils@bedford.symantec.com (Phil Shapiro) writes:
  1591. > Anyone who has THINK C or Symantec C++ already has this -- it's called
  1592. > "atexit()". If you register a function with atexit(), it's called at
  1593. > ExitToShell time with the correct A5, automatically.
  1594.  
  1595.   Yes, but:
  1596.  
  1597.     1. you need TC or SymC++ (I do)
  1598.     2. you need the ANSI baggage
  1599.  
  1600.   It was mostly for #2 that I put the code together.  I have the
  1601. UPP code worked out for PPC patching, but like you said I am not
  1602. sure that it is the best method for PPC code...
  1603.  
  1604. Dave
  1605.  
  1606. ============================================================
  1607. Dave Nebinger                    dnebing@bgsuvax.bgsu.edu
  1608. Network Manager, Biology Dept.   dnebing@opie.bgsu.edu
  1609. Bowling Green State University   dnebing@bgsuopie (bitnet)
  1610. Bowling Green, OH 43403          #include <std_disclaimer.h>
  1611.  
  1612.             Mighty 'Moof-in' PowerPC Ranger
  1613.  
  1614.  
  1615. ---------------------------
  1616.  
  1617. >From howardk@cyberstore.ca (Howard Katz)
  1618. Subject: Password for mounting remote volumes
  1619. Date: Mon, 28 Nov 1994 12:11:47 -0800
  1620. Organization: Enigmatic Software
  1621.  
  1622. Can someone tell me what a volume password is? Let me provide a little
  1623. context for the question.
  1624.  
  1625. We need to periodically automount remote servers on our network to ship
  1626. files over to them for archiving purposes. We need to do this transparently
  1627. without user intervention, so I'd like to use PBVolumeMount() to remount a
  1628. server, passing in saved mounting information from a prior session. This
  1629. seems fairly straightforward.
  1630.  
  1631. IM mentions a caveat, however, that System 7 filesharing software (which we
  1632. use) will not pass the volume password along with the PBVolumeMount() call.
  1633. My question is:
  1634.  
  1635. (1) What _is_ a volume password? All I currently know about and have access
  1636. to is the user password, and
  1637.  
  1638. (2) Does this mean I can't do what I want to do?
  1639.  
  1640. Any help would be much appreciated.
  1641.  
  1642. Thanks in advance,
  1643.  
  1644. Howard Katz
  1645. - --
  1646. Time flies like an arrow.
  1647. Fruit flies like a banana.
  1648.  
  1649. +++++++++++++++++++++++++++
  1650.  
  1651. >From jumplong@aol.com (Jump Long)
  1652. Date: 12 Dec 1994 01:15:34 -0500
  1653. Organization: America Online, Inc. (1-800-827-6364)
  1654.  
  1655. In article <howardk-281194121147@howard-katz.bcaa.bc.ca>,
  1656. howardk@cyberstore.ca (Howard Katz) writes:
  1657.  
  1658. >IM mentions a caveat, however, that System 7 filesharing software (which
  1659. >we use) will not pass the volume password along with the PBVolumeMount()
  1660. >call. My question is:
  1661. >
  1662. >(1) What _is_ a volume password? All I currently know about and have
  1663. >access to is the user password, and
  1664.  
  1665. Volume passwords are an optional feature of the AppleTalk Filing Protocol.
  1666.  It's so optional, that the AppleShare and File Sharing file servers don't
  1667. support it. There may be non-Apple AFP servers that support volume
  1668. passwords, but I don't know which ones.  It's kind of a stupid feature
  1669. since the password is sent to the server "clear text" (no encryption).
  1670.  
  1671. The note in IM: Files about volume passwords and PBVolumeMount only
  1672. pertains to older versions of the AppleShare client (the AppleShare
  1673. Chooser extension).  The problem was fixed in the AppleShare 3.0 client
  1674. and all laters versions of the AppleShare client (i.e., the clients that
  1675. shipped with System 7.1 and later, and with AppleShare Pro and 4.0.x).
  1676.  
  1677. >(2) Does this mean I can't do what I want to do?
  1678.  
  1679. Nope, not at all. Since you'll rarely even find a network volume with a
  1680. volume password, you probably don't even have to worry about it.  System 7
  1681. has little support for volume passwords - in fact, the Alias Manager
  1682. doesn't support them.
  1683.  
  1684. - Jim Luther
  1685.  
  1686. ---------------------------
  1687.  
  1688. >From jimsa@microsoft.com (Jim Sather)
  1689. Subject: SUMMARY: MacTCP Performance Problems
  1690. Date: Wed, 14 Dec 1994 20:42:07 GMT
  1691. Organization: Microsoft Corporation
  1692.  
  1693.  
  1694. About a week ago I asked for help/suggestions on how to speed up a TCP/IP
  1695. transport.  Here's a quick run down on the suggestions received.  It turns
  1696. out that the push flag was my problem.
  1697.  
  1698. -Jim
  1699.  
  1700. Robert Mah  <rmah@panix.com> wrote:
  1701. - -------------------------------------------------------
  1702. MacTCP is fairly sensitive to buffer space.   Try allocating a LOT more
  1703. space for the receive buffer when you create the stream.  Another thing
  1704. you might want to try is to use the TCPNoCopyRcv receive calls instead
  1705. of the TCPRcv call.
  1706.  
  1707. Also, make sure you are setting the "push" flag for TCPSend at the
  1708. appropriate times.  I think if you set it too often, you get lot's of
  1709. "smaller" packets instead of a few "larger" ones.  When to do this is
  1710. very application specific in nature.
  1711.  
  1712. Finally, you *are* calling MacTCP asynchronouslly aren't you?  And you
  1713. *are* using asych file mgr calls too, right?
  1714.  
  1715. Eric Scouten  <scouten@uiuc.edu> wrote:
  1716. - ----------------------------------------------------------
  1717. You have to do a lot of funny business with MacTCP to get good performance
  1718. from it. Try playing with such parameters as the buffer size, number of
  1719. entries in the RDS/WDS. Also, you can issue multiple read/write commands;
  1720. doing so may help performance.
  1721.  
  1722. In my experience, MacTCP maxes out at about 410KB/second on an otherwise
  1723. quiet Ethernet. This is in line with Apple's advertising copy for MacTCP,
  1724. and suggests that there is some inherent slowness in MacTCP.
  1725.  
  1726.  
  1727. ttuck  <ttuck@jolt.mpx.com.au> wrote:
  1728. - ----------------------------------------------------
  1729. You might be suffering from the "infinite slowdown problem" that
  1730. plagues MacTcp up to version 2.0.4.
  1731.  
  1732. I have noticed an increase in speed of my favourite netapps since the
  1733. upgrade.
  1734.  
  1735. You can FTP a patcher from seeding.apple.com. You apply the patch to a
  1736. "virgin" copy of 2.0.4.
  1737.  
  1738. It fixes a whole swag of bugs including a nasty one with DNS that could
  1739. hose it if the DNS had a lot to say ! :-)
  1740.  
  1741.  
  1742. ---------------------------
  1743.  
  1744. >From tjb@acpub.duke.edu (Tom Bryce)
  1745. Subject: [Q] How to find parameter info for traps
  1746. Date: 11 Dec 1994 18:25:48 GMT
  1747. Organization: Duke Med
  1748.  
  1749.  
  1750. I have a copy the Develop CD #17 with the old Inside Macs I-VI on it,
  1751. as well as files, toolbox, toolbox essentials, and so on from the new
  1752. Inside Macs.
  1753.  
  1754. Can anyone tell me where I should look to find information on parameter
  1755. info for traps? For example, if I were to patch _MountVol, in which
  1756. registers would the parameters for _MountVol be passed, and how should
  1757. I return a return value? Push an OSErr onto the stack??
  1758.  
  1759. Thanks for any help.
  1760.  
  1761. - ----------------------------------------------------------------------
  1762.  
  1763. Tom Bryce
  1764. for PGP public key finger tjbryce@amherst.edu
  1765.  
  1766. +++++++++++++++++++++++++++
  1767.  
  1768. >From scouten@metrowerks.com (Eric Scouten)
  1769. Date: Sun, 11 Dec 1994 12:46:03 -0600
  1770. Organization: metrowerks, inc.
  1771.  
  1772. In article <3cfg7c$mdl@news.duke.edu>, tjb@acpub.duke.edu (Tom Bryce) wrote:
  1773.  
  1774. > Can anyone tell me where I should look to find information on parameter
  1775. > info for traps? For example, if I were to patch _MountVol, in which
  1776. > registers would the parameters for _MountVol be passed, and how should
  1777. > I return a return value? Push an OSErr onto the stack??
  1778.  
  1779. My advice is to dissect the relevant header files. For example, in
  1780. <Files.h>, there is the following declaration, which gives 68K register
  1781. declarations:
  1782.  
  1783. #if !GENERATINGCFM
  1784. #pragma parameter __D0 PBMountVol(__A0)
  1785. #endif
  1786. extern pascal OSErr PBMountVol(ParmBlkPtr paramBlock)
  1787.  ONEWORDINLINE(0xA00F);
  1788.  
  1789.  
  1790. (NOTE: This is from the new Universal Headers 2.0, but the old headers
  1791. should look somewhat similar.)
  1792.  
  1793. In general, the IM volumes concentrate more on providing info to those who
  1794. are *using* the traps, rather than those who are patching them. When you
  1795. get into patching, you may have to do some sleuthing to get the info and
  1796. then experiment to ensure that you're getting the right parameters in the
  1797. right places.
  1798.  
  1799. -es
  1800.  
  1801. __________________________________________________________________________
  1802. Eric Scouten <scouten@metrowerks.com>
  1803.  
  1804. +++++++++++++++++++++++++++
  1805.  
  1806. >From tjb@acpub.duke.edu (Tom Bryce)
  1807. Date: 11 Dec 1994 20:31:25 GMT
  1808. Organization: Duke Med
  1809.  
  1810. In article <scouten-1112941246030001@mingus.isdn.uiuc.edu>
  1811. scouten@metrowerks.com (Eric Scouten) writes:
  1812.  
  1813. > In article <3cfg7c$mdl@news.duke.edu>, tjb@acpub.duke.edu (Tom Bryce) wrote:
  1814. > > Can anyone tell me where I should look to find information on parameter
  1815. > > info for traps? For example, if I were to patch _MountVol, in which
  1816. > > registers would the parameters for _MountVol be passed, and how should
  1817. > > I return a return value? Push an OSErr onto the stack??
  1818. > My advice is to dissect the relevant header files. For example, in
  1819. > <Files.h>, there is the following declaration, which gives 68K register
  1820. > declarations:
  1821. > #if !GENERATINGCFM
  1822. > #pragma parameter __D0 PBMountVol(__A0)
  1823. > #endif
  1824. > extern pascal OSErr PBMountVol(ParmBlkPtr paramBlock)
  1825. >  ONEWORDINLINE(0xA00F);
  1826.  
  1827. Can I follow up with a question about how to interpret the following
  1828. header, just grabbed at random from Files.h
  1829.  
  1830. pascal OSErr PBClose(ParmBlkPtr paramBlock,Boolean async); 
  1831. #pragma parameter __D0 PBCloseSync(__A0)
  1832. pascal OSErr PBCloseSync(ParmBlkPtr paramBlock)
  1833.     = 0xA001; 
  1834. #pragma parameter __D0 PBCloseAsync(__A0)
  1835. pascal OSErr PBCloseAsync(ParmBlkPtr paramBlock)
  1836.     = 0xA401; 
  1837.  
  1838. The first declaration (PBClose) seems to be for a close command. The
  1839. boolean seems to refer to whether it is being called asyncronously or
  1840. not, or in flow terms, whether the PBCloseSync or PBCloseAsync was
  1841. being called. 
  1842.  
  1843. Suppose I were patching the PBClose command, for example, just to give
  1844. a sysbeep whenever a file is closed. Files.h did not give an address
  1845. for a trap for PBClose, the above is all it had. Should I then patch
  1846. two traps, one for PBCloseSync, and another for PBCloseAsync? And where
  1847. is the decision being made to call one or the other? Is there a trap
  1848. PBClose that is first called which then interprets the Boolean async
  1849. and calls one of the other two?
  1850.  
  1851. Am I correct in assuming A0 points to the parameters for these two
  1852. routines, and D0 should hold the result code they return when they are
  1853. finished?
  1854.  
  1855. Also, if PBClose has its own trap, what does the parameter block look
  1856. like? There are *two* arguments to PBClose here. So, for example, does
  1857. A0 point to a chunk of memory in which first a ParmBlkPtr is located,
  1858. then sequentially thereafter one byte of Boolean? So *((unsigned char
  1859. *)A0+sizeof(ParmBlkPtr)) would point to the Boolean parameter?
  1860.  
  1861. If it sounds like I'm a total neophyte, I am. :-) I have the FAQ on
  1862. init writing and some sample code, but nowhere have I seen explained
  1863. how to handle these parameter issues.
  1864.  
  1865. Thanks
  1866.  
  1867. Tom
  1868.  
  1869. - ----------------------------------------------------------------------
  1870.  
  1871. Tom Bryce
  1872. for PGP public key finger tjbryce@amherst.edu
  1873.  
  1874. +++++++++++++++++++++++++++
  1875.  
  1876. >From scouten@metrowerks.com (Eric Scouten)
  1877. Date: Sun, 11 Dec 1994 15:15:30 -0600
  1878. Organization: metrowerks, inc.
  1879.  
  1880. In article <3cfnit$qum@news.duke.edu>, tjb@acpub.duke.edu (Tom Bryce) wrote:
  1881.  
  1882. [Initial question & my response deleted]
  1883.  
  1884. > Can I follow up with a question about how to interpret the following
  1885. > header, just grabbed at random from Files.h
  1886. > pascal OSErr PBClose(ParmBlkPtr paramBlock,Boolean async); 
  1887. > #pragma parameter __D0 PBCloseSync(__A0)
  1888. > pascal OSErr PBCloseSync(ParmBlkPtr paramBlock)
  1889. >     = 0xA001; 
  1890. > #pragma parameter __D0 PBCloseAsync(__A0)
  1891. > pascal OSErr PBCloseAsync(ParmBlkPtr paramBlock)
  1892. >     = 0xA401; 
  1893. > The first declaration (PBClose) seems to be for a close command. The
  1894. > boolean seems to refer to whether it is being called asyncronously or
  1895. > not, or in flow terms, whether the PBCloseSync or PBCloseAsync was
  1896. > being called.
  1897.  
  1898. Ahhh... now you're hitting on some of the complexity of Macintosh system
  1899. calls. As you suspectd, PBClose is actually a piece of glue code in the
  1900. compiler's library that dispatches the call to the PBCloseSync or
  1901. PBCloseAsync trap based on the value of the boolean parameter.
  1902.  
  1903. BUT.. the fun's not over yet: The A001 and A401 actually get dispatched to
  1904. the *SAME* address (the _Close, 0x001 in OS trap dispatch table). The
  1905. routine that implements these traps (actually part of the Device Manager,
  1906. although the File Manager shares the traps) then looks at the trap word to
  1907. determine how it should respond to the call.
  1908.  
  1909. Fun, huh?
  1910.  
  1911. So for your application, you should patch the _Close trap. Both sync &
  1912. async calls will be routed to your patch. HOWEVER, you should know that
  1913. you'll *also* be getting requests to close *devices*, so you'll have to
  1914. some work to decode the param block before declaring that a close file was
  1915. executed.
  1916.  
  1917.  
  1918. > Suppose I were patching the PBClose command, for example, just to give
  1919. > a sysbeep whenever a file is closed.
  1920.  
  1921. DANGER WILL ROBINSON... SysBeep cannot be called from interrupt-level
  1922. code. The asynchronous flavor of _Close (and all the other file/device
  1923. calls) *can* be called from interrupt code (even if your app doesn't do
  1924. it, some other system process is likely to). So you'll have to figure some
  1925. other debugging method.
  1926.  
  1927.  
  1928. > Files.h did not give an address
  1929. > for a trap for PBClose, the above is all it had.
  1930.  
  1931. As I said, PBClose is merely a bit of glue code. In the new Universal
  1932. Headers (shipping on CW/5), it's been replaced by a macro, so the compiler
  1933. can optomize away the extra call if a constant is given for the async
  1934. parameter. It looks like this:
  1935.  
  1936.   #define PBClose(pb, async) ((async) ? PBCloseAsync(pb) : PBCloseSync(pb))
  1937.  
  1938.  
  1939. > Am I correct in assuming A0 points to the parameters for these two
  1940. > routines, and D0 should hold the result code they return when they are
  1941. > finished?
  1942.  
  1943. Yes. This is generally true for all of the "low-level" file/device manager
  1944. calls. (These are the calls that have PB at the start of their names.)
  1945.  
  1946. -es
  1947.  
  1948. __________________________________________________________________________
  1949. Eric Scouten <scouten@metrowerks.com>
  1950.  
  1951. +++++++++++++++++++++++++++
  1952.  
  1953. >From jwbaxter@olympus.net (John W. Baxter)
  1954. Date: Sun, 11 Dec 1994 16:33:22 -0800
  1955. Organization: Internet for the Olympic Peninsula
  1956.  
  1957. In article <scouten-1112941515300001@mingus.isdn.uiuc.edu>,
  1958. scouten@metrowerks.com (Eric Scouten) wrote:
  1959.  
  1960. Eric Scouten sez:
  1961. > As I said, PBClose is merely a bit of glue code. In the new Universal
  1962. > Headers (shipping on CW/5), it's been replaced by a macro, so the compiler
  1963. > can optomize away the extra call if a constant is given for the async
  1964. > parameter. It looks like this:
  1965. >   #define PBClose(pb, async) ((async) ? PBCloseAsync(pb) : PBCloseSync(pb))
  1966. That's also the headers I have in my MPW installation (from E.T.O. 15).
  1967.  
  1968. For PPC, there really are two calls into the shared library:  PBCloseAsync
  1969. and PBCloseSync...the macro is a clever way to separate them out at
  1970. compile time, and doesn't get in the way of setting up the bit in the trap
  1971. for 68K.
  1972.  
  1973.    --John
  1974.  
  1975. -- 
  1976. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  1977.    Caesar attended the Senate in a rented toga.
  1978.    jwbaxter@pt.olympus.net
  1979.  
  1980. ---------------------------
  1981.  
  1982. >From han@ifa.hawaii.edu (Byron Han)
  1983. Subject: string constants in Metrowerks C code resource?
  1984. Date: Thu, 8 Dec 1994 07:40:57 GMT
  1985. Organization: Institute for Astronomy, University of Hawaii
  1986.  
  1987. How does one get string constants to work in 68K code resources in
  1988. Metrowerks?   I used to be able to do this just fine in MPW but now I am
  1989. stuck.  The PPC side of the code resource works just fine with the
  1990. embedded string constants but the 68K side is broken...
  1991.  
  1992. Thanks in advance.
  1993.  
  1994. BH
  1995.  
  1996. -- 
  1997. Byron Han * Institute for Astronomy * University of Hawaii at Manoa
  1998.   2680 Woodlawn Drive * Honolulu HI 96822 * han@ifa.hawaii.edu
  1999.       WWW: http://galileo.ifa.hawaii.edu/~sped/byronhan.html 
  2000.                 eWorld: BYRONHAN * AOL: BYRON Han
  2001.  
  2002. +++++++++++++++++++++++++++
  2003.  
  2004. >From jwbaxter@olympus.net (John W. Baxter)
  2005. Date: Fri, 09 Dec 1994 08:18:40 -0800
  2006. Organization: Internet for the Olympic Peninsula
  2007.  
  2008. In article <han-0712942140570001@128.171.75.8>, han@ifa.hawaii.edu (Byron
  2009. Han) wrote:
  2010.  
  2011. > How does one get string constants to work in 68K code resources in
  2012. > Metrowerks?   I used to be able to do this just fine in MPW but now I am
  2013. > stuck.  The PPC side of the code resource works just fine with the
  2014. > embedded string constants but the 68K side is broken...
  2015.  
  2016. See the sample CODE resources folder.  Metrowerks follows THINK's idea of
  2017. using register A4 to point to the globals (but the details are
  2018. different).  String constants are just globals to THINK and
  2019. CodeWarrior...not handled with the special embed in the code and reference
  2020. via the PC as MPW can be told to do.  [Frankly, I prefer MPW's way.]
  2021.  
  2022.   --John
  2023.  
  2024. -- 
  2025. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  2026.    Caesar attended the Senate in a rented toga.
  2027.    jwbaxter@pt.olympus.net
  2028.  
  2029. +++++++++++++++++++++++++++
  2030.  
  2031. >From ericstad@netcom.com (Eric Stadtherr)
  2032. Date: Mon, 12 Dec 1994 03:24:25 GMT
  2033. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  2034.  
  2035. han@ifa.hawaii.edu (Byron Han) writes:
  2036.  
  2037. >How does one get string constants to work in 68K code resources in
  2038. >Metrowerks?   I used to be able to do this just fine in MPW but now I am
  2039. >stuck.  The PPC side of the code resource works just fine with the
  2040. >embedded string constants but the 68K side is broken...
  2041.  
  2042. >Thanks in advance.
  2043.  
  2044. >BH
  2045.  
  2046. Are you trying something like:
  2047.  
  2048. void CodeResourceMain (void)
  2049. {
  2050.         StringPtr theString = "\pThis is a string";
  2051.         ...
  2052.         oldA4 = SetUpA4();
  2053.         ...
  2054.         RestoreA4 (oldA4);
  2055. }
  2056.  
  2057. If so, you'll need to move the assignment of the StringPtr inside the
  2058. SetUpA4() call.  This is because the string globals are referenced from
  2059. A4 under MetroWerks.  This worked under THINK C, I believe, since THINK
  2060. code resources always started with A0 pointing to the start of the
  2061. resource.
  2062.  
  2063. -Eric Stadtherr
  2064.  Ootinta Software
  2065.  
  2066. ---------------------------
  2067.  
  2068. End of C.S.M.P. Digest
  2069. **********************
  2070.